home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 22
/
AACD 22.iso
/
AACD
/
Resources
/
Sound
/
AHI
/
Developer
/
include
/
Asm
/
devices
/
ahi.i
Wrap
Text File
|
1997-04-27
|
14KB
|
462 lines
IFND DEVICES_AHI_I
DEVICES_AHI_I SET 1
**
** $VER: ahi.i 4.2 (27.4.97)
**
** ahi.device definitions
**
** (C) Copyright 1994-1997 Martin Blom
** All Rights Reserved.
**
** (TAB SIZE: 8)
**
*------------------------------------------------------------------------*
IFND EXEC_TYPES_I
INCLUDE 'exec/types.i'
ENDC
IFND EXEC_IO_I
INCLUDE 'exec/io.i'
ENDC
IFND UTILITY_TAGITEM_I
INCLUDE 'utility/tagitem.i'
ENDC
*------------------------------------------------------------------------*
*** MACROS
Fixed MACRO ; A fixed-point value, 16 bits
\1 EQU SOFFSET ; to the left of the point and
SOFFSET SET SOFFSET+4 ; 16 bits to the right
ENDM
AHINAME MACRO
dc.b "ahi.device",0
ENDM
; A handy macro to open the device for use as a library.
; Usage: OPENAHI <version>
; On exit: d0=_AHIBase or NULL for error.
OPENAHI MACRO
movem.l d1/a0-a1/a6,-(sp)
lea AHI_PORT(pc),a0
clr.l (a0)+
clr.l (a0)+
moveq #0,d0
move.l d0,(a0)+
move.l 4.w,a6
jsr _LVOCreateMsgPort(a6)
lea AHI_PORT(pc),a0
move.l d0,(a0)
beq.b AHI_ERROR
move.l d0,a0
moveq #AHIRequest_SIZEOF,d0
jsr _LVOCreateIORequest(a6)
lea AHI_IOR(pc),a0
move.l d0,(a0)
beq.b AHI_ERROR
lea AHI_NAME(pc),a0
move.l d0,a1
move.w #\1,ahir_Version(a1)
move.l #AHI_NO_UNIT,d0
moveq #0,d1
jsr _LVOOpenDevice(a6)
lea AHI_DEVICE(pc),a0
move.l d0,(a0)
bne.b AHI_ERROR
move.l AHI_IOR(PC),a0
move.l IO_DEVICE(a0),d0
bra.b AHI_EXIT
AHI_PORT: dc.l 0
AHI_IOR: dc.l 0
AHI_DEVICE: dc.l 0
AHI_NAME: AHINAME
even
AHI_ERROR:
moveq #0,D0
AHI_EXIT:
movem.l (sp)+,d1/a0-a1/a6
ENDM
; Here is the macro for closing the device after it has been
; opened with the OPENAHI macro. Call CLOSEAHI even if OPENAHI
; failed!
CLOSEAHI MACRO
movem.l d0-d1/a0-a1/a6,-(sp)
move.l 4.w,a6
lea AHI_DEVICE(pc),a1
tst.l (a1)
bne.b .ahi_nodevice
subq.l #1,(a1)
move.l AHI_IOR(pc),a1
jsr _LVOCloseDevice(a6)
lea AHI_IOR(pc),a1
move.l (a1),a0
clr.l (a1)
jsr _LVODeleteIORequest(a6)
.ahi_nodevice
lea AHI_PORT(pc),a1
move.l (a1),a0
clr.l (a1)
jsr _LVODeleteMsgPort(a6)
movem.l (sp)+,d0-d1/a0-a1/a6
ENDM
*** STRUCTURES
; AHIAudioCtrl
STRUCTURE AHIAudioCtrl,0
APTR ahiac_UserData
; Lots of private data follows!
LABEL AHIAudioCtrl_SIZEOF ; Do not use!
; AHISoundMessage
STRUCTURE AHISoundMessage,0
UWORD ahism_Channel
LABEL AHISoundMessage_SIZEOF
; AHIRecordMessage
STRUCTURE AHIRecordMessage,0
ULONG ahirm_Type ; Format of buffer (object)
APTR ahirm_Buffer ; Pointer to the sample array
ULONG ahirm_Length ; Number of sample frames in buffer
LABEL AHIRecordMessage_SIZEOF
; AHISampleInfo
STRUCTURE AHISampleInfo,0
ULONG ahisi_Type ; Format of samples
APTR ahisi_Address ; Address to array of samples
ULONG ahisi_Length ; Number of samples in array
LABEL AHISampleInfo_SIZEOF
; AHIAudioModeRequester
STRUCTURE AHIAudioModeRequester,0
ULONG ahiam_AudioID; ; Selected audio mode
ULONG ahiam_MixFreq; ; Selected mixing/sampling frequency
WORD ahiam_LeftEdge; ; Coordinates of requester on exit
WORD ahiam_TopEdge;
WORD ahiam_Width;
WORD ahiam_Height;
BOOL ahiam_InfoOpened; ; Info window opened on exit
WORD ahiam_InfoLeftEdge; ; Last coordinates of Info window
WORD ahiam_InfoTopEdge;
WORD ahiam_InfoWidth;
WORD ahiam_InfoHeight;
APTR ahiam_UserData; ; You can store your own data here
; Lots of private data follows!
LABEL AHIAudioModeRequester_SIZEOF
ahie_Effect EQU 0
; AHIEffMasterVolume
STRUCTURE AHIEffMasterVolume,0
ULONG ahiemv_Effect ; Set to AHIET_MASTERVOLUME
Fixed ahiemv_Volume ; See autodocs for range!
LABEL AHIEffMasterVolume_SIZEOF
; AHIEffOutputBuffer
STRUCTURE AHIEffOutputBuffer,0
ULONG ahieob_Effect ; Set to AHIET_OUTPUTBUFFER
APTR ahieob_Func
; These fields are filled by AHI
ULONG ahieob_Type ; Format of buffer
APTR ahieob_Buffer ; Pointer to the sample array
ULONG ahieob_Length ; Number of sample frames in buffer
LABEL AHIEffOutputBuffer_SIZEOF
; AHIEffDSPMask (V4)
STRUCTURE AHIEffDSPMask,0
ULONG ahiedm_Effect ; Set to AHIET_DSPMASK
UWORD ahiedm_Channels ; Number of elements in array
LABEL ahiedm_Mask ; Here follows the UBYTE array
LABEL AHIEffDSPMask_SIZEOF
AHIEDM_WET EQU 0
AHIEDM_DRY EQU 1
; AHIEffDSPEcho (V4)
STRUCTURE AHIEffDSPEcho,0
ULONG ahiede_Effect ; Set to AHIET_DSPECHO
ULONG ahiede_Delay ; In samples
Fixed ahiede_Feedback
Fixed ahiede_Mix
Fixed ahiede_Cross
LABEL AHIEffDSPEcho_SIZEOF
; AHIEffChannelInfo (V4)
STRUCTURE AHIEffChannelInfo,0
ULONG ahieci_Effect ; Set to AHIET_CHANNELINFO
APTR ahieci_Func
UWORD ahieci_Channels
UWORD ahieci_Pad
; The rest is filled by AHI
LABEL ahieci_Offset ; The ULONG array follows
LABEL AHIEffChannelInfo_SIZEOF
*** TAGS
AHI_TagBase EQU TAG_USER
AHI_TagBaseR EQU AHI_TagBase|$8000
; AHI_AllocAudioA tags
AHIA_AudioID EQU AHI_TagBase+1 ; Desired audio mode
AHIA_MixFreq EQU AHI_TagBase+2 ; Suggested mixing frequency
AHIA_Channels EQU AHI_TagBase+3 ; Suggested number of channels
AHIA_Sounds EQU AHI_TagBase+4 ; Number of sounds to use
AHIA_SoundFunc EQU AHI_TagBase+5 ; End-of-Sound Hook
AHIA_PlayerFunc EQU AHI_TagBase+6 ; Player Hook
AHIA_PlayerFreq EQU AHI_TagBase+7 ; Frequency for player Hook (Fixed)
AHIA_MinPlayerFreq EQU AHI_TagBase+8 ; Minimum Frequency for player Hook
AHIA_MaxPlayerFreq EQU AHI_TagBase+9 ; Maximum Frequency for player Hook
AHIA_RecordFunc EQU AHI_TagBase+10 ; Sample recording Hook
AHIA_UserData EQU AHI_TagBase+11 ; What to put in ahiac_UserData
; AHI_PlayA tags (V4)
AHIP_BeginChannel EQU AHI_TagBase+40 ; All command tags should be...
AHIP_EndChannel EQU AHI_TagBase+41 ; ... enclosed by these tags.
AHIP_Freq EQU AHI_TagBase+50
AHIP_Vol EQU AHI_TagBase+51
AHIP_Pan EQU AHI_TagBase+52
AHIP_Sound EQU AHI_TagBase+53
AHIP_Offset EQU AHI_TagBase+54
AHIP_Length EQU AHI_TagBase+55
AHIP_LoopFreq EQU AHI_TagBase+60
AHIP_LoopVol EQU AHI_TagBase+61
AHIP_LoopPan EQU AHI_TagBase+62
AHIP_LoopSound EQU AHI_TagBase+63
AHIP_LoopOffset EQU AHI_TagBase+64
AHIP_LoopLength EQU AHI_TagBase+65
; AHI_ControlAudioA tags
AHIC_Play EQU AHI_TagBase+80 ; Boolean
AHIC_Record EQU AHI_TagBase+81 ; Boolean
AHIC_MonitorVolume EQU AHI_TagBase+82
AHIC_MonitorVolume_Query EQU AHI_TagBase+83 ; ti_Data is pointer to Fixed (LONG)
AHIC_MixFreq_Query EQU AHI_TagBase+84 ; ti_Data is pointer to ULONG
* --- New for V2, they will be ignored by V1 ---
AHIC_InputGain EQU AHI_TagBase+85
AHIC_InputGain_Query EQU AHI_TagBase+86 ; ti_Data is pointer to Fixed (LONG)
AHIC_OutputVolume EQU AHI_TagBase+87
AHIC_OutputVolume_Query EQU AHI_TagBase+88 ; ti_Data is pointer to Fixed (LONG)
AHIC_Input EQU AHI_TagBase+89
AHIC_Input_Query EQU AHI_TagBase+90 ; ti_Data is pointer to ULONG
AHIC_Output EQU AHI_TagBase+91
AHIC_Output_Query EQU AHI_TagBase+92 ; ti_Data is pointer to ULONG
; AHI_GetAudioAttrsA tags
AHIDB_AudioID EQU AHI_TagBase+100
AHIDB_Driver EQU AHI_TagBaseR+101 ; Pointer to name of driver
AHIDB_Flags EQU AHI_TagBase+102 ; Private!
AHIDB_Volume EQU AHI_TagBase+103 ; Boolean
AHIDB_Panning EQU AHI_TagBase+104 ; Boolean
AHIDB_Stereo EQU AHI_TagBase+105 ; Boolean
AHIDB_HiFi EQU AHI_TagBase+106 ; Boolean
AHIDB_PingPong EQU AHI_TagBase+107 ; Boolean
AHIDB_MultTable EQU AHI_TagBase+108 ; Private!
AHIDB_Name EQU AHI_TagBaseR+109 ; Pointer to name of this mode
AHIDB_Bits EQU AHI_TagBase+110 ; Output bits
AHIDB_MaxChannels EQU AHI_TagBase+111 ; Max supported channels
AHIDB_MinMixFreq EQU AHI_TagBase+112 ; Min mixing freq. supported
AHIDB_MaxMixFreq EQU AHI_TagBase+113 ; Max mixing freq. supported
AHIDB_Record EQU AHI_TagBase+114 ; Boolean
AHIDB_Frequencies EQU AHI_TagBase+115
AHIDB_FrequencyArg EQU AHI_TagBase+116 ; ti_Data is index number!
AHIDB_Frequency EQU AHI_TagBase+117
AHIDB_Author EQU AHI_TagBase+118 ; Pointer to driver author name
AHIDB_Copyright EQU AHI_TagBase+119 ; Pointer to driver copyright notice
AHIDB_Version EQU AHI_TagBase+120 ; Pointer to driver version string
AHIDB_Annotation EQU AHI_TagBase+121 ; Pointer to driver annotation text
AHIDB_IndexArg EQU AHI_TagBase+123 ; ti_Data is frequency!
AHIDB_BufferLen EQU AHI_TagBase+122 ; Specifies the string buffer size
AHIDB_Index EQU AHI_TagBase+124
AHIDB_Realtime EQU AHI_TagBase+125 ; Boolean
AHIDB_MaxPlaySamples EQU AHI_TagBase+126 ; It's sample *frames*
AHIDB_MaxRecordSamples EQU AHI_TagBase+127 ; It's sample *frames*
AHIDB_MixFreq EQU AHI_TagBase+128
AHIDB_FullDuplex EQU AHI_TagBase+129 ; Boolean
* --- New for V2, they will be ignored by V1 ---
AHIDB_MinMonitorVolume EQU AHI_TagBase+130
AHIDB_MaxMonitorVolume EQU AHI_TagBase+131
AHIDB_MinInputGain EQU AHI_TagBase+132
AHIDB_MaxInputGain EQU AHI_TagBase+133
AHIDB_MinOutputVolume EQU AHI_TagBase+134
AHIDB_MaxOutputVolume EQU AHI_TagBase+135
AHIDB_Inputs EQU AHI_TagBase+136
AHIDB_InputArg EQU AHI_TagBase+137 * ti_Data is input index
AHIDB_Input EQU AHI_TagBase+138
AHIDB_Outputs EQU AHI_TagBase+139
AHIDB_OutputArg EQU AHI_TagBase+140 * ti_Data is input index
AHIDB_Output EQU AHI_TagBase+141
* --- New for V4, they will be ignored by V2 and earlier ---
AHIDB_Data EQU AHI_TagBaseR+142 ; Private!
; AHI_BestAudioIDA tags
* --- New for V4, they will be ignored by V2 and earlier ---
AHIB_Dizzy EQU (AHI_TagBase+190)
; AHI_AudioRequestA tags
; Window control
AHIR_Window EQU AHI_TagBase+200 ; Parent window
AHIR_Screen EQU AHI_TagBase+201 ; Screen to open on if no window
AHIR_PubScreenName EQU AHI_TagBase+202 ; Name of public screen
AHIR_PrivateIDCMP EQU AHI_TagBase+203 ; Allocate private IDCMP?
AHIR_IntuiMsgFunc EQU AHI_TagBase+204 ; Function to handle IntuiMessages
AHIR_SleepWindow EQU AHI_TagBase+205 ; Block input in AHIR_Window?
AHIR_UserData EQU AHI_TagBase+206 ; What to put in ahiam_UserData
; Text display
AHIR_TextAttr EQU AHI_TagBase+220 ; Text font to use for gadget text
AHIR_Locale EQU AHI_TagBase+221 ; Locale to use for text
AHIR_TitleText EQU AHI_TagBase+222 ; Title of requester
AHIR_PositiveText EQU AHI_TagBase+223 ; Positive gadget text
AHIR_NegativeText EQU AHI_TagBase+224 ; Negative gadget text
; Initial settings
AHIR_InitialLeftEdge EQU AHI_TagBase+240 ; Initial requester coordinates
AHIR_InitialTopEdge EQU AHI_TagBase+241
AHIR_InitialWidth EQU AHI_TagBase+242 ; Initial requester dimensions
AHIR_InitialHeight EQU AHI_TagBase+243
AHIR_InitialAudioID EQU AHI_TagBase+244 ; Initial audio mode id
AHIR_InitialMixFreq EQU AHI_TagBase+245 ; Initial mixing/sampling frequency
AHIR_InitialInfoOpened EQU AHI_TagBase+246 ; Info window initially opened?
AHIR_InitialInfoLeftEdge EQU AHI_TagBase+247 ; Initial Info window coords.
AHIR_InitialInfoTopEdge EQU AHI_TagBase+248
AHIR_InitialInfoWidth EQU AHI_TagBase+249 ; Not used!
AHIR_InitialInfoHeight EQU AHI_TagBase+250 ; Not used!
; Options
AHIR_DoMixFreq EQU AHI_TagBase+260 ; Allow selection of mixing frequency?
AHIR_DoDefaultMode EQU AHI_TagBase+261 ; Allow selection of default mode? (V4)
; Filtering
AHIR_FilterTags EQU AHI_TagBase+270 ; Pointer to filter taglist
AHIR_FilterFunc EQU AHI_TagBase+271 ; Function to filter mode id's
*** DEFS
AHI_INVALID_ID EQU ~0 ; Invalid Audio ID
AHI_DEFAULT_ID EQU $00000000 ; Only for AHI_AllocAudioA()!
AHI_LOOPBACK_ID EQU $00000001 ; Special sample render ID
AHI_DEFAULT_FREQ EQU 0 ; Only for AHI_AllocAudioA()!
AHI_MIXFREQ EQU ~0 ; Special frequency for AHI_SetFreq()
AHI_NOSOUND EQU ~0 ; Turns a channel off
; Set#? Flags
BITDEF AHIS,IMM,0
; Effect types
AHIET_CANCEL EQU 1<<31 ; OR with effect to disable
AHIET_MASTERVOLUME EQU 1
AHIET_OUTPUTBUFFER EQU 2
* --- New for V4 ---
AHIET_DSPMASK EQU 3
AHIET_DSPECHO EQU 4
AHIET_CHANNELINFO EQU 5
; Sound types
AHIST_NOTYPE EQU ~0 ; Private
AHIST_SAMPLE EQU 0 ; 8 or 16 bit sample
AHIST_DYNAMICSAMPLE EQU 1 ; Dynamic sample
AHIST_INPUT EQU 1<<29 ; The input from your sampler
AHIST_BW EQU 1<<30 ; Private
; Sample types
; Note that only AHIST_M8S, AHIST_S8S, AHIST_M16S and AHIST_S16S
; are supported by AHI_LoadSound().
AHIST_M8S EQU 0 ; Mono, 8 bit signed (BYTE)
AHIST_M16S EQU 1 ; Mono, 16 bit signed (WORD)
AHIST_S8S EQU 2 ; Stereo, 8 bit signed (2×BYTE)
AHIST_S16S EQU 3 ; Stereo, 16 bit signed (2×WORD)
AHIST_M32S EQU 8 ; Mono, 32 bit signed (LONG)
AHIST_S32S EQU 10 ; Stereo, 32 bit signed (2×LONG)
AHIST_M8U EQU 4 ; OBSOLETE!
; Error codes
AHIE_OK EQU 0 ; No error
AHIE_NOMEM EQU 1 ; Out of memory
AHIE_BADSOUNDTYPE EQU 2 ; Unknown sound type
AHIE_BADSAMPLETYPE EQU 3 ; Unknown/unsupported sample type
AHIE_ABORTED EQU 4 ; User-triggered abortion
AHIE_UNKNOWN EQU 5 ; Error, but unknown
AHIE_HALFDUPLEX EQU 6 ; CMD_WRITE/CMD_READ failure
*- DEVICE INTERFACE DEFINITIONS FOLLOWS ------------------------------------*
; Device units
AHI_DEFAULT_UNIT EQU 0
AHI_NO_UNIT EQU 255
; The preference file
ID_AHIU EQU "AHIU"
ID_AHIG EQU "AHIG"
STRUCTURE AHIUnitPrefs,0
UBYTE ahiup_Unit
UBYTE ahiup_Pad
UWORD ahiup_Channels
ULONG ahiup_AudioMode
ULONG ahiup_Frequency
Fixed ahiup_MonitorVolume
Fixed ahiup_InputGain
Fixed ahiup_OutputVolume
ULONG ahiup_Input
ULONG ahiup_Output
LABEL AHIUnitPrefs_SIZEOF
STRUCTURE AHIGlobalPrefs,0
UWORD ahigp_DebugLevel ; Range: 0-3 (for None, Low,
; High and All
BOOL ahigp_DisableSurround
BOOL ahigp_DisableEcho
BOOL ahigp_FastEcho
Fixed ahigp_MaxCPU
BOOL ahigp_ClipMasterVolume
LABEL AHIGlobalPrefs_SIZEOF
; Debug levels
AHI_DEBUG_NONE EQU (0)
AHI_DEBUG_LOW EQU (1)
AHI_DEBUG_HIGH EQU (2)
AHI_DEBUG_ALL EQU (3)
; AHIRequest
STRUCTURE AHIRequest,0
STRUCT ahir_Std,IOSTD_SIZE ; Standard IO request
UWORD ahir_Version ; Needed version
* --- New for V4, they will be ignored by V2 and earlier ---
UWORD ahir_Pad1
ULONG ahir_Private1 ; Hands off!
ULONG ahir_Private2 ; Hands off!
ULONG ahir_Type ; Sample format
ULONG ahir_Frequency ; Sample/Record frequency
Fixed ahir_Volume ; Sample volume
Fixed ahir_Position ; Stereo position
APTR ahir_Link ; For double buffering
LABEL AHIRequest_SIZEOF
; Flags for OpenDevice()
BITDEF AHID,NOMODESCAN,0
ENDC ; DEVICES_AHI_I